Many computing environments or infrastructures provide for shared access to pools of configurable resources (such as compute services, storage, applications, networking devices, etc.) over a communications network. One type of such a computing environment may be referred to as a cloud computing environment. Cloud computing environments allow users, and enterprises, with various computing capabilities to store and process data in either a privately owned cloud or on a publicly available cloud in order to make data accessing mechanisms more efficient and reliable. Through the cloud environments, software applications or services may be distributed across the various cloud resources in a manner that improves the accessibility and use of such applications and services for users of the cloud environments.
Operators of cloud computing environments often host many different applications from many different tenants or clients. For example, a first tenant may utilize the cloud environment and the underlying resources and/or devices for data hosting while another client may utilize the cloud resources for networking functions. In general, each client may configure the cloud environment for their specific application needs. However, applications are often deployed in the cloud environment with either too many resources used or too little. In other words, cloud computing clients tend to define their own application deployment (i.e., which resources are requested how many such resources are needed, and/or how those resources are interconnected) within the available cloud environment. In either case, client application deployment may not be optimized for the available cloud resources such that performance of the deployed application suffers.